﻿using System;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using EntGuayasSLA.BL;
using EntGuayasSLA.BL.Licenciamiento;
using EntGuayasSLA.BL.Listas;
using EntGuayasSLA.BL.Listas.Criterias;
using Ext.Net;

namespace EGuayas.Web.Usuario
{
    public partial class pgAdmin : pgBase
    {   
       
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                
                if (!X.IsAjaxRequest)
                {
                    string idPageSessionUnique = Request["idPage"];
                    string idPersona = Request["idx1"];
                    string idUsuario = Request["idx2"];
                    string tmpRol = Request["CodeRol"];

                    this.hddIdPageSession.SetValue(idPageSessionUnique);
                    this.hddIdPersonaTmp.SetValue(idPersona);
                    this.frmGeneral.Reset();
                    if (idUsuario == null)
                        idUsuario = GetSessionUsuario.UsuarioId;
                    if (tmpRol == Valores.Codigo_Rol_Director)
                    {
                        this.frmActivo.Show();

                    }
                    else
                    {
                        this.frmActivo.Hide();
                    }
                    if (idPersona != null & idUsuario != null)
                    {

                        Persona objPersona = Persona.GetEditableRoot(Guid.Parse(idPersona));
                        ValueFormPersonaAdmin objVal = new ValueFormPersonaAdmin(objPersona.Id.ToString(), Valores.PageEvento_Lectura);

                        Boolean read = ((GetSessionPage.GetSession(idPageSessionUnique) == Valores.PageEvento_Lectura) || (GetSessionPage.GetSession(idPageSessionUnique) == Valores.PageEvento_Eliminar)) ? true : false;
                    
                        Parroquia objParroquia = Parroquia.GetEditableRoot(Guid.Parse(objPersona.ParroquiaId));

                        objVal.Identificacion = objPersona.Identificacion;
                        objVal.Nombre = objPersona.Nombre;
                        objVal.Apellido = objPersona.Apellido;
                        objVal.Email = objPersona.Email;
                        objVal.Direccion = objPersona.Direccion;
                        objVal.Provincia = objParroquia.ProvinciaId;                       
                        objVal.Canton=objParroquia.CantonId;
                        objVal.Parroquia = objPersona.ParroquiaId;
                 
                        Usuarios user = Usuarios.GetEditableRoot(idUsuario);
                        objVal.IdUser = user.Id.ToString();
                        objVal.Login=user.Login;
                        objVal.password1=user.Clave;
                        objVal.password2=user.Clave;

                        X.Js.Call("pgFn.UpdatePanelReadOnly", read);
                        X.Js.Call("AppUser.Persona.SetLocalidad", "wuc_persona", objParroquia.ProvinciaId, objParroquia.CantonId, objParroquia.Id, null, true);
                        this.frmGeneral.SetValues(objVal);

                        //Setear campo usuario activo
                        if (tmpRol == Valores.Codigo_Rol_Director)
                        {

                            if (user.Estado == Valores.Codigo_Estado_Activo)
                            {
                                X.Js.Call(" pgFn.setValueRadioGroup", Valores.Codigo_CHAR_Si);

                            }
                            else
                            {
                                X.Js.Call(" pgFn.setValueRadioGroup", Valores.Codigo_CHAR_No);
                            }
                        }
                    }
                    if (idPageSessionUnique != null)
                    {
                        switch (GetSessionPage.GetSession(idPageSessionUnique))
                        {
                            case Valores.PageEvento_Eliminar:
                                this.hddEvento.SetValue(Valores.PageEvento_Eliminar);
                                this.btnModificar.Hide();
                                this.btnSaveForm.Hide();
                                this.btnEliminar.Show();
                                break;

                            case Valores.PageEvento_Lectura:
                                this.hddEvento.SetValue(Valores.PageEvento_Lectura);
                                this.btnModificar.Hide();
                                this.btnSaveForm.Hide();
                                this.btnEliminar.Hide();
                                break;

                            case Valores.PageEvento_Modificar:
                                this.hddEvento.SetValue(Valores.PageEvento_Modificar);
                                this.btnModificar.Show();
                                this.btnSaveForm.Hide();
                                this.btnEliminar.Hide();
                                break;
                            default:

                                SetSessionPage setSession = new SetSessionPage(idPageSessionUnique, Valores.PageEvento_Nuevo);
                                this.hddEvento.SetValue(Valores.PageEvento_Nuevo);
                                this.btnSaveForm.Show();
                                this.btnModificar.Hide();
                                this.btnEliminar.Hide();
                                break;

                        }
                    }
                    else
                    {
                        SetSessionPage setSession = new SetSessionPage(idPageSessionUnique, Valores.PageEvento_Nuevo);
                        this.hddEvento.SetValue(Valores.PageEvento_Nuevo);
                        this.btnSaveForm.Show();
                        this.btnModificar.Hide();
                        this.btnEliminar.Hide();
                    
                    
                    }

                }

            }
            catch (Exception ex)
            {
                this.btnSaveForm.Hide();
                this.btnModificar.Hide();
                this.btnEliminar.Hide();
                RegistrarLog(ex);
            }
        }
        protected void EliminarClick(object sender, DirectEventArgs e)
        {
            try
            {
                string gridJson = e.ExtraParams["prmValues"];

                var dataItem = JSON.Deserialize<Dictionary<string, string>>(gridJson);

                Usuarios objUsuario = Usuarios.GetEditableRoot(dataItem["IdUser"]);
                objUsuario.Delete();
                objUsuario.Save();

                Guid Id = Guid.Parse(dataItem["Id"]);
                Persona objPersona = Persona.GetEditableRoot(Id);
                objPersona.Delete();
                objPersona.Save();

                btnEliminar.Disable();
                X.Js.Call("pgFn.ViewGrid", "Administrador eliminado");
            }
            catch (Exception ex)
            {
                RegistrarLog(ex);

            }
        }

        protected void ModificarClick(object sender, DirectEventArgs e)
        {
            try
            {
                string gridJson = e.ExtraParams["prmValues"];
                var dataItem = JSON.Deserialize<Dictionary<string, string>>(gridJson);
                
                Guid Id = Guid.Parse(dataItem["Id"]);

                Persona objPersona = Persona.GetEditableRoot(Id);
             
                objPersona.Identificacion = dataItem["Identificacion"];
                objPersona.Nombre = dataItem["Nombre"];
                objPersona.Apellido = dataItem["Apellido"];
                objPersona.Direccion = dataItem["Direccion"];
                objPersona.Email = dataItem["Email"];
                objPersona.ParroquiaId = dataItem["Parroquia"];
                objPersona.Save();

                Usuarios objUsuario = Usuarios.GetEditableRoot(dataItem["IdUser"]);
              
                objUsuario.Login = dataItem["Login"];
                objUsuario.Clave = Seguridad.Encriptar(dataItem["password1"]);
                if (Request["CodeRol"] == Valores.Codigo_Rol_Director)
                {
                    if (dataItem["rdgSiNo_group"] == Valores.Codigo_CHAR_Si)
                    {
                        objUsuario.Estado = Valores.Codigo_Estado_Activo;
                    }
                    else
                    {
                        objUsuario.Estado = Valores.Codigo_Estado_NoActivo;
                    }
                }
                objUsuario.Save();
                btnModificar.Disable();
             
                CallViewMgEnd("modificado");
              

            }
            catch (Exception ex)
            {
                RegistrarLog(ex);

            }
        }
        protected void SaveClick(object sender, DirectEventArgs e)
        {
            try
            {

                string gridJson = e.ExtraParams["prmValues"];
                var dataItem = JSON.Deserialize<Dictionary<string, string>>(gridJson);
                var listaRoles = RolLista.GetRolLista();
                //var infoRol = listaRoles.FirstOrDefault(r => r.Codigo == Valores.Codigo_Rol_Administrador);
                var infoRol = listaRoles.FirstOrDefault(r => r.Codigo == Request["CodeRol"]);
                Persona objPersona = Persona.NewEditableRoot();
                objPersona.Id = System.Guid.NewGuid();
             
                objPersona.Identificacion = dataItem["Identificacion"];
                objPersona.Nombre = dataItem["Nombre"];
                objPersona.Apellido = dataItem["Apellido"];
                objPersona.Direccion = dataItem["Direccion"];
                objPersona.Email = dataItem["Email"];         
                objPersona.ParroquiaId = dataItem["Parroquia"];
                objPersona.Save();
                Usuarios objUsuario= Usuarios.NewEditableRoot();
                objUsuario.Id = System.Guid.NewGuid();
                objUsuario.PersonaId = objPersona.Id.ToString();
                objUsuario.Login = dataItem["Login"];
                objUsuario.Clave = Seguridad.Encriptar(dataItem["password1"]);
                objUsuario.RolId = infoRol.Id.ToString();
                objUsuario.FechaCreacion = DateTime.Now;
                if (Request["CodeRol"] == Valores.Codigo_Rol_Director)
                {
                    if (dataItem["rdgSiNo_group"] == Valores.Codigo_CHAR_Si)
                    {
                        objUsuario.Estado = Valores.Codigo_Estado_Activo;
                    }
                    else
                    {
                        objUsuario.Estado = Valores.Codigo_Estado_NoActivo;
                    }
                }
                else
                {
                    objUsuario.Estado = Valores.Codigo_Estado_Activo;
                }
                objUsuario.Save();
                               
                btnSaveForm.Disable();
                CallViewMgEnd("creado");
              
            }
            catch (Exception ex)
            {
                RegistrarLog(ex);
               
            }
        }

        private void CallViewMgEnd(string estado)
        { 
            try
            {
                    string msgRol = "";
                    switch (Request["CodeRol"])
                    {
                        case Valores.Codigo_Rol_Administrador: msgRol = "Administrador"; break;
                        case Valores.Codigo_Rol_Director: msgRol = "Director"; break;
                        case Valores.Codigo_Rol_SubDirector: msgRol = "Sub-Director"; break;

                    }
                    X.Js.Call("pgFn.ViewGrid", msgRol +" "+estado);
                 
            }
            catch (Exception ex)
            {
                RegistrarLog(ex);
            }
        }
        #region OnComponentAdded
        protected void OnPersonaAdded(object sender, ComponentAddedEventArgs e)
        {
            try
            {
                string idPageSessionUnique = Request["idPage"];
                Ext.Net.FormPanel panel = (Ext.Net.FormPanel)e.Control;
                SetCustomConfigWucPage(panel, idPageSessionUnique);
            }
            catch (Exception ex)
            {
                RegistrarLog(ex);
            }

        }
        protected void OnCuentaAdded(object sender, ComponentAddedEventArgs e)
        {
            try{
            string idPageSessionUnique = Request["idPage"];
            Ext.Net.FormPanel panel = (Ext.Net.FormPanel)e.Control;
            SetCustomConfigWucPage(panel, idPageSessionUnique);
            SetCustomConfig(panel, panel.Parent.ID + "idPers", Request["idx1"]);
            }
            catch (Exception ex)
            {
                RegistrarLog(ex);
            }
        }
        #endregion

    }
    class  ValueFormPersonaAdmin
    {
        public string Evento { get; set; }
        public string IdUser { get; set; }
        public string Id { get; set; }
        public string Identificacion { get; set; }
        public string Nombre { get;  set; }
        public string Apellido { get;  set; }
        public string Email { get;  set; }
        public string Direccion { get;  set; }
        public string Provincia { get;  set; }
        public object[] _Provincia_state { get; set; }
        public string Canton { get;  set; }
        public string _Canton_state { get;  set; }
        public string Parroquia { get;  set; }
        public object[] _Parroquia_state { get; set; }
        public object[] _cbxTipoPersona_state { get; set; }
   
        public string Login { get;  set; }
        public string password1 { get;  set; }
        public string password2 { get; set; }


        public ValueFormPersonaAdmin(string _id, string _evt)
        {
          
            Id = _id;
            Evento = _evt;
        }

    }
}